//
//  ReaderAppDelegate.m
//  Reader
//
//  Created by Jerry Lee on 9/30/09.
//  Copyright Liox 2009. All rights reserved.
//

#import "ReaderAppDelegate.h"
#import "Chapter.h"

@implementation ReaderAppDelegate

@synthesize window;
@synthesize chapters, navigationController, catalogViewController;

#pragma mark -
#pragma mark Application lifecycle

-(void) checkAndCreateDatabase{
	// Check if the SQL database has already been saved to the users phone, if not then copy it over
	BOOL success;
	
	// Create a FileManager object, we will use this to check the status
	// of the database and to copy it over if required
	NSFileManager *fileManager = [NSFileManager defaultManager];
	
	// Check if the database has already been created in the users filesystem
	success = [fileManager fileExistsAtPath:databasePath];
	
	// If the database already exists then return without doing anything
	if(success) return;
	
	// If not then proceed to copy the database from the application to the users filesystem
	
	// Get the path to the database in the application package
	NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:databaseName];
	
	// Copy the database from the package to the users filesystem
	[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
	
	[fileManager release];
}


-(void) readBooksFromDatabase {
	// Setup the database object
	sqlite3 *database;
	
	// Init the chapters Array
	chapters = [[NSMutableArray alloc] init];
	
	// Open the database from the users filessytem
	if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
		// Setup the SQL Statement and compile it for faster access
		const char *sqlStatement = "select * from books";
		sqlite3_stmt *compiledStatement;
		if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
			// Loop through the results and add them to the feeds array
			while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
				// Read the data from the result row
				NSString *aTitle = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
				NSString *aContent = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
				
				// Create a new book object with the data from the database
				Chapter *chapter = [[Chapter alloc] initWithName:aTitle content:aContent];
				
				// Add the chapter object to the chapters Array
				[chapters addObject:chapter];
				
				[chapter release];
			}
		}
		// Release the compiled statement from memory
		sqlite3_finalize(compiledStatement);
		
	}
	sqlite3_close(database);
	
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
	databaseName = @"Taiji_Yang.sql";
	
	//Get the path to the documents directory and append the databasename
	NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(
																 NSDocumentDirectory,NSUserDomainMask, YES);
	NSString *documentsDir = [documentPaths objectAtIndex:0];
	databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
	
	// Execute the "checkAndCreateDatabase" function
	[self checkAndCreateDatabase];
	
	// Query the database for all book records and construct the "books" array
	[self readBooksFromDatabase];
	
	[window addSubview:[navigationController view]];
	//[window addSubview:rootController.view];
	[window addSubview:catalogViewController.view];
	 
    [window makeKeyAndVisible];
}


- (void)dealloc {
	//[rootController release];
    [chapters release];
    [window release];
	[navigationController release];
	[catalogViewController release];
    [super dealloc];
}


@end
